package com.woniuxy.service;

import com.woniuxy.entity.dto.operations.*;
import com.woniuxy.entity.po.operations.Client;
import com.woniuxy.util.PageParam;
import com.woniuxy.util.ResponseData;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * @BelongsProject: charging-management-platform
 * @BelongsPackage: com.woniuxy.service
 * @Author: Quan
 * @Date: 2025/3/30 14:14
 */
public interface ClientService {
	/**
	 * @Description: 用于在点卡模块中使用，展示部分数据
	 * @Param: [pageParam]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/3/30
	 */
	ResponseData<?> queryAllClientToSelect(PageParam<ClientForCardSelectDisplayDTO> pageParam);

	/**
	 * @Description: 查询全部client用于展示
	 * @Param:
	 * @return:
	 * @Author: Quan
	 * @Date: 2025/3/31
	 */
	ResponseData<?> queryAll(PageParam<ClientDisplayDTO> pageParam);

	/**
	 * @Description: 通过id对对应的用户进行禁用
	 * @Param: [id]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/3/31
	 */
	ResponseData<?> forbiddenById(Long id);

	/**
	 * @Description: 通过id进行删除，逻辑删除用户
	 * @Param: [id]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/3/31
	 */
	ResponseData<?> delete(Long id);

	/**
	 * @Description: 从字典中查询客户的类型
	 * @Param: []
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/1
	 */
	ResponseData<?> queryClientType();

	/**
	 * @Description: 通过用户id查询详情与名下的车辆
	 * @Param: [id]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ResponseData<?> queryClientBindVehicleByClientId(Long id);

	/**
	 * @Description: 将图片存储到minio中，并且返回对应的地址
	 * @Param: [file]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ResponseData<?> uploadImg(MultipartFile file) throws Exception;

	/**
	 * @Description: 解绑车辆的id，并且用户持车数-1
	 * @Param: [id]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ResponseData<?> unbindVehicle(UnbindVehicleDTO unbindVehicleDTO);

	/**
	 * @Description: 查询没有绑定的的车辆，共前端展示选择
	 * @Param: [vehicle]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ResponseData<?> queryUnbindVehicle(PageParam<VehicleDisplayForClientDetailDTO> pageParam);

	/**
	 * @Description: 绑定车辆的id，并且用户持车数+1
	 * @Param: [id]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ResponseData<?> bindVehicle(UnbindVehicleDTO unbindVehicleDTO);

	/**
	 * @Description: 更新客户的数据
	 * @Param: [clientDetailDTO]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/2
	 */
	ResponseData<?> update(ClientDetailDTO clientDetailDTO);

	/**
	 * @Description: 查询支付类型
	 * @Param: []
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/3
	 */
	ResponseData<?> queryAccountType();

	/**
	 * @Description: 添加客户信息
	 * @Param: [clientDetailDTO]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/7
	 */
	ResponseData<?> addClient(ClientDetailDTO clientDetailDTO);

	/**
	 * @Description: 批量删除用户
	 * @Param: [ids]
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/7
	 */
	ResponseData<?> batchDelClient(List<Long> ids);

	/**
	 * @Description: 刷新数据
	 * @Param: []
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: Quan
	 * @Date: 2025/4/7
	 */
	ResponseData<?> refresh();
	/**
	 * @Description: 查询client的总数，得到总注册人数
	 * @Param: []
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: DirtyFlower
	 * @Date: 2025/4/7
	 */
	ResponseData<?> queryClientNumber();
	/**
	 * @Description: 查询client的总数，得到总注册人数
	 * @Param: []
	 * @return: com.woniuxy.util.ResponseData<?>
	 * @Author: DirtyFlower
	 * @Date: 2025/4/7
	 */
	ResponseData<?> queryClientNumberToday();
}
